package com.chongxinlaiguo.mapstruct.dto.req;

import lombok.*;

import java.io.Serializable;

/**
 * 扩展字段
 */
@Data
public class ExtendInfoReqDTO implements Serializable {
    /**
     * 返回的交易日期
     */
    private String responseTradeDate;


    private MchntInfo mchntInfo;

    /**
     * 账号对应的userId
     */
    private String userId;

    /**
     * 订单未支付超时时间，unix时间戳，秒
     */
    private Long expireTime;

    /**
     * 自动续费
     */
    private AutoPaymentRemoteReqDTO autoPaymentInfo;
    /**
     * env
     */
    private Env env = new Env();

    /**
     * customerInfo
     */
    private CustomerInfo customerInfo;

    /**
     * 前端传递的adyen支付方式返回的stateData，包括token等信息
     */
    private String stateData;

    /**
     * 是否保存支付方式
     */
    private Boolean storePaymentMethod;

    @Data
    public static class MchntInfo implements Serializable {
        /**
         * 商户号
         */
        private String mchntNo;

        /**
         * 终端号
         */
        private String termAppNo;

        /**
         * 商户扩展信息
         */
        private String ext;
    }

    @Data
    public static class AutoPaymentRemoteReqDTO implements Serializable {
        /**
         * 自动续费类型
         */
        private Integer autoPaymentType;
        /**
         * 姓名
         */
        private String name;
        /**
         * 邮箱
         */
        private String email;
        /**
         * 手机号
         */
        private String mobile;
        /**
         * 用户id
         */
        private String userId;
        /**
         * 用户授权id
         */
        private String userAuthId;
        /**
         * 渠道用户id
         */
        private String channelCustomerId;
        /**
         * 过期时间，unix时间戳
         */
        private Long expireAt;
        /**
         * 最大金额
         */
        private Long maxAmount;
    }

    @AllArgsConstructor
    @NoArgsConstructor
    @Setter
    @Getter
    public static class Env implements Serializable {
        /**
         * 下单的浏览器环境信息
         */
        private BrowserInfo browserInfo;
        /**
         * 客户端设备的IP地址
         */
        private String clientIp;
        /**
         * osType String
         * 操作系统类型。有效值包括：
         * <p>
         * IOS: 表示操作系统是苹果的 iOS
         * ANDROID: 表示操作系统是谷歌的 Android
         * 注意：当 terminalType 不是WEB时，请指定此字段
         */
        private String osType;
        /**
         * 商户服务适用的终端类型。有效值为：
         * <p>
         * WEB: 客户端终端类型为网站，通过 PC 浏览器打开
         * WAP: 客户端终端类型为 H5 页面，通过移动浏览器打开
         * APP: 客户端终端类型为移动应用
         * MINI_APP: 商户端的终端类型为手机小程序
         */
        private String terminalType;
    }

    @AllArgsConstructor
    @NoArgsConstructor
    @Setter
    @Getter
    public static class BrowserInfo implements Serializable {
        /**
         * 用户浏览器的请求头信息
         */
        private String acceptHeader;
        /**
         * 用户浏览器是否支持运行Java
         */
        private Boolean javaEnabled;
        /**
         * 用户浏览器是否支持运行JavaScript
         */
        private Boolean javaScriptEnabled;
        /**
         * 用户浏览器的语言
         */
        private String language;
        /**
         * 用户浏览器的用户代理
         */
        private String userAgent;

        /**
         * 浏览器的颜色深度
         */
        private Integer colorDepth;
        /**
         * 屏幕高度
         */
        private Integer screenHeight;
        /**
         * 屏幕宽度
         */
        private Integer screenWidth;

        /**
         * 时区偏移量
         */
        private String timeZoneOffset;
    }
    @AllArgsConstructor
    @NoArgsConstructor
    @Setter
    @Getter
    public static class CustomerInfo implements Serializable {
        /**
         * 邮箱
         */
        private String email;
        /**
         * 手机号
         */
        private String mobile;
        /**
         * 用户id，必传
         */
        private String userId;
        /**
         * 名，必传
         */
        private String givenName;
        /**
         * 姓
         */
        private String surname;
    }
}
